package com.company.cloud.common.rba;

import cn.hutool.core.util.StrUtil;

/**
 * 位运算权限管理
 * */
public class RBACUtils {

	/**
	 * 2的n次方
	 * */
	public static int pur(int p){
		return (int)Math.pow(2, p);
	}
	
	/**
	 * 计算总权限码
	 * @param values : 权限码集合
	 * */
	public static int purview(int...values) {
		int v = pur(values[0]);
		for(int i=1,l=values.length; i<l; i++){
			v += pur(values[i]);
		}
		return v;
	}
	
	/**
	 * 新增权限
	 * @param ：purview 总权限码
	 * @param v : 权限码
	 * */
	public static int add(int purview, int v) {
		if(has(purview, v)) {
			return purview;
		}else {
			int p=pur(v);
			return purview+p;
		}
	}
	
	/**
	 * 移除权限
	 * @param ：purview 总权限码
	 * @param v : 权限码
	 * */
	public static int remove(int purview, int v) {
		if(has(purview, v)) {
			int p=pur(v);
			return purview-p;
		}else {
			return purview;
		}
	}
	
	/**
	 * 判断权限
	 * @param ：purview 总权限码
	 *  @param v : 权限码
	 * */
	public static boolean has(int purview, int v) {
		int p=pur(v);
		return p== (purview & p);
	}
	
	
	public static void main(String[] args) {
//		int p= RBACUtils.purview(1,2,4,8,16,32,64);
//		System.out.println(p);
		for (int i = 0; i < 5; i++) {
			System.out.println(StrUtil.format("i={},val={}", i,RBACUtils.pur(i)));
		}
		
	
		
	//Add_OP("添加",1),
//		Info_OP("查看",2),
//		Edit_OP("编辑",4),
//		Del_OP(" 删除",8),
//		Import_OP("导入",16),
//		Export_OP("导出",32),
//		BatchPrinting_OP("批量打印",64)
//		
	}
	
	
}
